<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script>
			//1找出元素 item 在给定数组 arr 中的位置,如果数组中存在 item，则返回元素在数组中的位置，否则返回 -1			
			function indexOf(arr, item) {
                for(var i = 0; i < arr.length; i++){
                    if(arr[i] === item){
                         return i;
                         }
                }
               return -1;
               }
			console.log("第一题：",indexOf([ 1, 2, 3, 4 ], 3));
			
			//2 计算给定数组 arr 中所有元素的总和
			//方法1
			function sum(arr) {
                       var sum = 0;
            for(var i = 0; i < arr.length; i++){
                      sum += arr[i];
            }
             return sum;
             }
			console.log("第二题：",sum([ 1, 2, 3, 4 ]));
			//方法2
			function sum(arr) {
                  var len = arr.length;    //定义一个变量等于数组的长度
                  if(len == 0){
                  	return 0;
                  }else if(len == 1){
                  	 return arr[0];              
                  }else{
                  	return arr[0] + sum(arr.slice(1));
                  }
                
             }
			 console.log("第二题：",sum([ 1, 2, 3, 4 ]));
			 //方法3：
			 function sum(arr) {
                      var sum = 0;
                    arr.forEach(function(val, i){
                         sum += val;
                    });
                 return sum;
                }
			  console.log("第二题：",sum([ 1, 2, 3, 4 ]));
			  
			  //移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr，结果返回新的数组
			  //方法1
			  function remove(arr, item) {
                       //声明一个新数组保存结果
                        var a = [];
                        //循环遍历
                      for(var i=0; i < arr.length; i++){
                       //如果arr[i]不等于item，就加入数组a
                     if(arr[i] != item){
                           a.push(arr[i]);
                    }
                }
               return a;
              }
			 console.log("第三题：",remove([1, 2, 3, 4, 2], 2)); 
			 
			 //方法2
			 function remove(arr, item) {
                       var a=[];
                 arr.forEach(function(e){
                 if(e!==item){
                    a.push(e);
                }
             })
              return a;
            }
			console.log("第三题：",remove([1, 2, 3, 4, 2], 2));  
			
			//方法3
			function remove(arr,item){
                    var a= arr.slice(0);//将arr中的元素赋给a
                   for(var i=0;i<a.length;i++){
                   if(a[i] == item){
                   a.splice(i,1);//删除a中第i个元素
                  i--;
             }
         }
              return a;
        }
		console.log("第三题：",remove([1, 2, 3, 4, 2], 2)); 
		
		//方法4
		function remove(arr,item){
               return arr.filter(function(ele){
                 return ele != item;
              })
        }
		console.log("第三题：",remove([1, 2, 3, 4, 2], 2));
		
		//移除数组 arr 中的所有值与 item 相等的元素，直接在给定的 arr 数组上进行操作，并将结果返回
		//方法一：
        function removeDirectly(arr, item) {
            for(var i=0;i<arr.length;i++)
               {
                  if(arr[i]==item)
               {
                  arr.splice(i,1);
                   i=0;
                }
                }
                 return arr;
        }
         console.log("第四题：",removeDirectly([1, 2, 2, 3, 4, 2, 2],2));
         
         
        //方法2：

             function removeDirectly(arr, item) {
                  for(var i=arr.length;i>=0;i--)
                    {
                       if(arr[i]==item)
                    {
                       arr.splice(i,1);
                   }
                }
                   return arr;
                }
              console.log("第四题：",removeDirectly([1, 2, 2, 3, 4, 2, 2],2));
              
              //在数组 arr 末尾添加元素 item。不要直接修改数组 arr，结果返回新的数组
              function append(arr, item) {  
                  var arr2=new Array();  
                  for(var i=0;i<arr.length;i++){  
                      arr2.push(arr[i]);  
                 }  
                  arr2.push(item);  
                 return arr2;  
  
                }  
                console.log("第五题：",append([1, 2, 3, 4],10));
                
                //删除数组 arr 最后一个元素。不要直接修改数组 arr，结果返回新的数组
                //第一种：：
               // 很简单的解决方案，声明一个新数组，循环遍历到原数组的倒数第二项push进新数组，返回新数组
               function truncate(arr) {
                    var m = [];
                for(var i = 0; i < arr.length - 1; i++){
                   m.push(arr[i]);
                }
                   return m;
                }
                  console.log("第六题：",truncate([1, 2, 3, 4]));


                //第二种：：
                //利用splice()的删除、增加、替换功能
                function truncate(arr) {
                      var m = arr.slice(0);
                      m.splice(m.length-1,1);
                 return m;
                }
                   console.log("第六题：",truncate([1, 2, 3, 4]));


                //第三种：
                 //利用slice()浅克隆，进行复制到末端的元素
                function truncate(arr) {
                returnarr.slice(0,-1);
                }
                 console.log("第六题：",truncate([1, 2, 3, 4]));

                //第四种：：
                 // filter不止能够对比ele的单个值，对不符合的idx下标也可以做出对比返回是否保留相应的元素
                function truncate(arr) {
                   return arr.filter(function(ele,idx,arr){
                   return arr.length - 1 !== idx;
                    });
                }
                    console.log("第六题：",truncate([1, 2, 3, 4]));
            
            //在数组 arr 开头添加元素 item。不要直接修改数组 arr，结果返回新的数组
            //方法1：
             function prepend(arr,item){
             	var newArr = arr.slice(0);
             	newArr.unshift(item);
             	return newArr;	
             }
              console.log("第七题：",prepend([1, 2, 3, 4],10));
              //方法2：
               function prepend(arr,item){
             	return [item].concat(arr);	
             }
              console.log("第七题：",prepend([1, 2, 3, 4],10));
              
              
              //删除数组 arr 第一个元素。不要直接修改数组 arr，结果返回新的数组
              function curtail(arr){
              	 var arr3 =arr;
              	  arr3.shift();
 	            return  arr3;
              }
              console.log("第八题：",curtail([1, 2, 3, 4]));
              
              //合并数组 arr1 和数组 arr2。不要直接修改数组 arr，结果返回新的数组
              function concat(arr1,arr2){
              	return   arr1.concat(arr2);
              }
              console.log("第九题：",concat([1, 2, 3, 4], ['a', 'b', 'c', 1]));
              
              //在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr，结果返回新的数组
              function  insert(index,item){
              	   var arr4 = index;
              	    arr4.splice(3,0,item);
                	    return  arr4;
              }
              console.log("第十题：",insert([1, 2, 3, 4], 'z', 2));
              
              //统计数组 arr 中值等于 item 的元素出现的次数
              function count(arr, item) { 
              	var num = 0;
              	for(var i = 0; i < arr.length; i++){ 
              		if(arr[i] == item){
              			num ++; 
              		} 
              	} 
              	return num;
              }
                console.log("第十一题：",count([1, 2, 4, 4, 3, 4, 3], 4));
                
              //找出数组 arr 中重复出现过的元素  
              function duplicates(arr) { 
              	var a = []; //先排序，如果后一个与前一个相等且未保存，则保存。 
              	for(var i=0;i<arr.length;i++){
              		for(var j=i+1;j<arr.length;j++){
              		arr[i]==arr[j]&&a.indexOf(arr[i])==-1&&a.push(arr[i]);
              	} 
              	}
              	
              	return a; 
              }
               console.log("第十二题：",duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort());
               
              // 为数组 arr 中的每个元素求二次方。不要直接修改数组 arr，结果返回新的数组
              function square(arr) { 
              	var a = []; 
              	for(var i = 0; i< arr.length; i++){
              		a[i] = arr[i] * arr[i];
              	} 
              	return a; 
              }
             console.log("第十三题：",square([1, 2, 3, 4]));
             
             //在数组 arr 中，查找值与 item 相等的元素出现的所有位置
             function findAllOccurrences(arr, target) { 
             	var a = []; 
             	for(var i = 0; i < arr.length; i++){ 
             		if(target == arr[i]){
             			a.push(i); 
             		} 
             	} 
             	return a;
             }
            console.log("第十四题：",findAllOccurrences('abcdefabc'.split(''), 'a').sort());
		</script>
	</body>
</html>
